#include"comm.hpp"

int main()
{
    Init init;

    int shmid = createShm();
    char *shmaddr = (char*)shmat(shmid,nullptr,0);
   
    //打开管道文件
    int fd = open(FIFO_FILE, O_RDONLY); // 等待写入方打开之后，自己才会打开文件，向后执行， open 阻塞了！
    if (fd < 0)
    {
        log(Fatal, "error string: %s, error code: %d", strerror(errno), errno);
        exit(FIFO_OPEN_ERR);
    }

    struct shmid_ds shmds;
     while(true)
    {
        //当写端没有写入时，读端会阻塞。
        char c;
        ssize_t s = read(fd, &c, 1);
        if(s == 0) break;
        else if(s < 0) break;

        cout << "client say@ " << shmaddr << endl; //直接访问共享内存
        sleep(1);

        shmctl(shmid, IPC_STAT, &shmds);
        cout << "shm size: " << shmds.shm_segsz << endl;
        cout << "shm nattch: " << shmds.shm_nattch << endl;
        printf("shm key: 0x%x\n",  shmds.shm_perm.__key);
        cout << "shm mode: " << shmds.shm_perm.mode << endl;
    }

    //取消挂载
    shmdt(shmaddr);
    //释放共享内存
    shmctl(shmid,IPC_RMID,nullptr);
    close(fd);
    return 0;
}